iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Mobile Development

用Spring Boot架設後端結合Android前端建構智慧個人化推薦系統系列 第 22

Day22 Spring Security的跨站請求偽造(CSRF)防護:為什麼這麼重要?

  • 分享至 

  • xImage
  •  

跨站請求偽造(CSRF,Cross-Site Request Forgery)是一種網路攻擊手法,攻擊者利用受害者的身份發送未經授權的請求。這種攻擊特別危險,因為它利用的是用戶的身份和權限,而不是直接篡改網站。因此,理解和防範CSRF攻擊對於應用程序的安全性至關重要

什麼是CSRF?

CSRF是一種攻擊方式,攻擊者可以欺騙用戶在不知情的情況下提交請求。假設用戶已經登錄某個網站,攻擊者可能會引導用戶點擊一個惡意鏈接,該鏈接會發送請求到用戶已登錄的網站,使網站執行一個用戶不希望執行的操作。

例如,假設用戶在銀行網站上進行轉帳操作。如果用戶在登錄狀態下點擊了一個惡意鏈接,該鏈接就可能觸發一個轉帳請求,將資金轉移到攻擊者的帳戶

為什麼CSRF攻擊如此可怕

  • 利用已登錄的會話:攻擊者無需獲取用戶的憑證,只要用戶在正常登錄狀態下,就可以發起請求。
  • 隱蔽性:用戶可能整個過程中並不意識到他們正在發送請求。
  • 破壞性:CSRF可以引起數據損失、資金盜竊等嚴重後果。

Spring Security的CSRF防護

Spring Security是一個強大的安全框架,它提供了對CSRF的內建防護。以下是如何在Spring Security中啟用和配置CSRF防護的簡介

在Spring Security中,CSRF防護是預設啟用的。你可以在安全配置類中確認或自定義CSRF配置

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf() // CSRF防護
            .and()
            .authorizeRequests()
            .anyRequest().authenticated();
    }
}

在提交表單或 Ajax 請求時,需要將CSRF token包含在請求中。Spring Security自動生成CSRF token,並在用戶會話中保存。你可以在模板引擎中引用該token,例如在Thymeleaf中

<form action="/submit" method="post">
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    <!-- 其他表單字段 -->
    <button type="submit">提交</button>
</form>

若使用Ajax請求,也需要將token添加到請求標頭中

$.ajax({
    type: "POST",
    url: "/submit",
    headers: {
        'X-CSRF-TOKEN': $('meta[name="_csrf"]').attr('content')
    },
    data: { /* 你的數據 */ },
    success: function(response) {
        // 處理成功回應
    }
});

如果需要,您可以進一步自定義CSRF設置,例如更改token的參數名稱或排除某些請求的CSRF檢查

http.csrf()
    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
    .ignoringAntMatchers("/api/**");
    ```
    
CSRF攻擊是一種常見且危險的安全隱患,但通過Spring Security的CSRF防護功能,可以有效地防範此類攻擊。開發者在構建應用程序時,必須時刻關注和實施安全措施,尤其是對於用戶交互和敏感操作的保護。理解CSRF的工作原理及其防護方式,將有助於提升你應用程序的整體安全性

上一篇
Day21 Spring Security 使用OAuth2進行社交媒體登入:如何整合第三方登入方式
下一篇
Day23 設計智慧個人化推薦系統架構:系統的整體結構與組件介紹
系列文
用Spring Boot架設後端結合Android前端建構智慧個人化推薦系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言